package com.ruoyi.system.domain.aggregation;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 商家个性化分润配置对象 merchant_profit_config
 * 
 * @author ruoyi
 * @date 2025-01-10
 */
public class MerchantProfitConfig extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 配置ID */
    private Long id;

    /** 商家ID */
    @Excel(name = "商家ID")
    private Long merchantId;

    /** 商家名称 */
    @Excel(name = "商家名称")
    private String merchantName;

    // ========== 异业联盟分润配置 ==========
    
    /** 异业联盟总提点比例（%） */
    @Excel(name = "异业总提点", readConverterExp = "%")
    private BigDecimal interIndustryTotalRate;

    /** 商家分润比例（%） */
    @Excel(name = "商家分润比例", readConverterExp = "%")
    private BigDecimal interIndustryMerchantRate;

    /** 业务员分润比例（%） */
    @Excel(name = "业务员分润比例", readConverterExp = "%")
    private BigDecimal interIndustrySalesmanRate;

    /** 区域代理分润比例（%） */
    @Excel(name = "区域代理分润比例", readConverterExp = "%")
    private BigDecimal interIndustryRegionRate;

    /** 总公司分润比例（%） */
    @Excel(name = "总公司分润比例", readConverterExp = "%")
    private BigDecimal interIndustryCompanyRate;

    // ========== 广告收益分润配置 ==========
    
    /** 广告总收益比例（%） */
    @Excel(name = "广告总收益比例", readConverterExp = "%")
    private BigDecimal adTotalRate;

    /** 商家广告分润比例（%） */
    @Excel(name = "商家广告分润比例", readConverterExp = "%")
    private BigDecimal adMerchantRate;

    /** 用户广告分润比例（%） */
    @Excel(name = "用户广告分润比例", readConverterExp = "%")
    private BigDecimal adUserRate;

    /** 业务员广告分润比例（%） */
    @Excel(name = "业务员广告分润比例", readConverterExp = "%")
    private BigDecimal adSalesmanRate;

    /** 区域代理广告分润比例（%） */
    @Excel(name = "区域代理广告分润比例", readConverterExp = "%")
    private BigDecimal adRegionRate;

    /** 总公司广告分润比例（%） */
    @Excel(name = "总公司广告分润比例", readConverterExp = "%")
    private BigDecimal adCompanyRate;

    // ========== 门店特殊配置 ==========
    
    /** 门店类型 */
    @Excel(name = "门店类型", readConverterExp = "normal=普通,vip=重点,flagship=旗舰")
    private String storeType;

    /** 门店额外奖励比例（%） */
    @Excel(name = "门店额外奖励比例", readConverterExp = "%")
    private BigDecimal storeBonusRate;

    /** 最低订单金额（元） */
    @Excel(name = "最低订单金额")
    private BigDecimal minOrderAmount;

    /** 每日最大分润限额（元） */
    @Excel(name = "每日最大分润限额")
    private BigDecimal maxDailyLimit;

    // ========== 广告奖励配置 ==========
    
    /** 广告最小观看时长（秒） */
    @Excel(name = "广告最小观看时长")
    private Integer adRewardMinDuration;

    /** 是否必须看完广告才有奖励 */
    @Excel(name = "必须看完广告", readConverterExp = "1=是,0=否")
    private Boolean adRewardCompleteRequired;

    /** 每日广告奖励次数限制 */
    @Excel(name = "每日广告奖励次数限制")
    private Integer adRewardDailyLimit;

    /** 每次观看广告奖励金额（元） */
    @Excel(name = "每次观看广告奖励金额")
    private BigDecimal adRewardAmountPerView;

    // ========== 锁定用户配置 ==========
    
    /** 是否启用用户锁定 */
    @Excel(name = "启用用户锁定", readConverterExp = "1=是,0=否")
    private Boolean userLockEnabled;

    /** 锁定用户数量上限 */
    @Excel(name = "锁定用户数量上限")
    private Integer lockUserLimit;

    /** 锁定持续时间（天） */
    @Excel(name = "锁定持续时间", readConverterExp = "天")
    private Integer lockDurationDays;

    // ========== 状态和审核 ==========
    
    /** 状态 */
    @Excel(name = "状态", readConverterExp = "1=启用,0=禁用")
    private Integer status;

    /** 审核状态 */
    @Excel(name = "审核状态", readConverterExp = "0=待审核,1=已通过,2=已拒绝")
    private Integer auditStatus;

    /** 审核拒绝原因 */
    @Excel(name = "审核拒绝原因")
    private String auditReason;

    /** 审核人ID */
    @Excel(name = "审核人ID")
    private Long auditUserId;

    /** 审核时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date auditTime;

    public void setId(Long id) 
    {
        this.id = id;
    }

    public Long getId() 
    {
        return id;
    }
    public void setMerchantId(Long merchantId) 
    {
        this.merchantId = merchantId;
    }

    public Long getMerchantId() 
    {
        return merchantId;
    }
    public void setMerchantName(String merchantName) 
    {
        this.merchantName = merchantName;
    }

    public String getMerchantName() 
    {
        return merchantName;
    }

    public BigDecimal getInterIndustryTotalRate() {
        return interIndustryTotalRate;
    }

    public void setInterIndustryTotalRate(BigDecimal interIndustryTotalRate) {
        this.interIndustryTotalRate = interIndustryTotalRate;
    }

    public BigDecimal getInterIndustryMerchantRate() {
        return interIndustryMerchantRate;
    }

    public void setInterIndustryMerchantRate(BigDecimal interIndustryMerchantRate) {
        this.interIndustryMerchantRate = interIndustryMerchantRate;
    }

    public BigDecimal getInterIndustrySalesmanRate() {
        return interIndustrySalesmanRate;
    }

    public void setInterIndustrySalesmanRate(BigDecimal interIndustrySalesmanRate) {
        this.interIndustrySalesmanRate = interIndustrySalesmanRate;
    }

    public BigDecimal getInterIndustryRegionRate() {
        return interIndustryRegionRate;
    }

    public void setInterIndustryRegionRate(BigDecimal interIndustryRegionRate) {
        this.interIndustryRegionRate = interIndustryRegionRate;
    }

    public BigDecimal getInterIndustryCompanyRate() {
        return interIndustryCompanyRate;
    }

    public void setInterIndustryCompanyRate(BigDecimal interIndustryCompanyRate) {
        this.interIndustryCompanyRate = interIndustryCompanyRate;
    }

    public BigDecimal getAdTotalRate() {
        return adTotalRate;
    }

    public void setAdTotalRate(BigDecimal adTotalRate) {
        this.adTotalRate = adTotalRate;
    }

    public BigDecimal getAdMerchantRate() {
        return adMerchantRate;
    }

    public void setAdMerchantRate(BigDecimal adMerchantRate) {
        this.adMerchantRate = adMerchantRate;
    }

    public BigDecimal getAdUserRate() {
        return adUserRate;
    }

    public void setAdUserRate(BigDecimal adUserRate) {
        this.adUserRate = adUserRate;
    }

    public BigDecimal getAdSalesmanRate() {
        return adSalesmanRate;
    }

    public void setAdSalesmanRate(BigDecimal adSalesmanRate) {
        this.adSalesmanRate = adSalesmanRate;
    }

    public BigDecimal getAdRegionRate() {
        return adRegionRate;
    }

    public void setAdRegionRate(BigDecimal adRegionRate) {
        this.adRegionRate = adRegionRate;
    }

    public BigDecimal getAdCompanyRate() {
        return adCompanyRate;
    }

    public void setAdCompanyRate(BigDecimal adCompanyRate) {
        this.adCompanyRate = adCompanyRate;
    }

    public String getStoreType() {
        return storeType;
    }

    public void setStoreType(String storeType) {
        this.storeType = storeType;
    }

    public BigDecimal getStoreBonusRate() {
        return storeBonusRate;
    }

    public void setStoreBonusRate(BigDecimal storeBonusRate) {
        this.storeBonusRate = storeBonusRate;
    }

    public BigDecimal getMinOrderAmount() {
        return minOrderAmount;
    }

    public void setMinOrderAmount(BigDecimal minOrderAmount) {
        this.minOrderAmount = minOrderAmount;
    }

    public BigDecimal getMaxDailyLimit() {
        return maxDailyLimit;
    }

    public void setMaxDailyLimit(BigDecimal maxDailyLimit) {
        this.maxDailyLimit = maxDailyLimit;
    }

    public Integer getAdRewardMinDuration() {
        return adRewardMinDuration;
    }

    public void setAdRewardMinDuration(Integer adRewardMinDuration) {
        this.adRewardMinDuration = adRewardMinDuration;
    }

    public Boolean getAdRewardCompleteRequired() {
        return adRewardCompleteRequired;
    }

    public void setAdRewardCompleteRequired(Boolean adRewardCompleteRequired) {
        this.adRewardCompleteRequired = adRewardCompleteRequired;
    }

    public Integer getAdRewardDailyLimit() {
        return adRewardDailyLimit;
    }

    public void setAdRewardDailyLimit(Integer adRewardDailyLimit) {
        this.adRewardDailyLimit = adRewardDailyLimit;
    }

    public BigDecimal getAdRewardAmountPerView() {
        return adRewardAmountPerView;
    }

    public void setAdRewardAmountPerView(BigDecimal adRewardAmountPerView) {
        this.adRewardAmountPerView = adRewardAmountPerView;
    }

    public Boolean getUserLockEnabled() {
        return userLockEnabled;
    }

    public void setUserLockEnabled(Boolean userLockEnabled) {
        this.userLockEnabled = userLockEnabled;
    }

    public Integer getLockUserLimit() {
        return lockUserLimit;
    }

    public void setLockUserLimit(Integer lockUserLimit) {
        this.lockUserLimit = lockUserLimit;
    }

    public Integer getLockDurationDays() {
        return lockDurationDays;
    }

    public void setLockDurationDays(Integer lockDurationDays) {
        this.lockDurationDays = lockDurationDays;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getAuditStatus() {
        return auditStatus;
    }

    public void setAuditStatus(Integer auditStatus) {
        this.auditStatus = auditStatus;
    }

    public String getAuditReason() {
        return auditReason;
    }

    public void setAuditReason(String auditReason) {
        this.auditReason = auditReason;
    }

    public Long getAuditUserId() {
        return auditUserId;
    }

    public void setAuditUserId(Long auditUserId) {
        this.auditUserId = auditUserId;
    }

    public Date getAuditTime() {
        return auditTime;
    }

    public void setAuditTime(Date auditTime) {
        this.auditTime = auditTime;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("merchantId", getMerchantId())
            .append("merchantName", getMerchantName())
            .append("interIndustryTotalRate", getInterIndustryTotalRate())
            .append("interIndustryMerchantRate", getInterIndustryMerchantRate())
            .append("interIndustrySalesmanRate", getInterIndustrySalesmanRate())
            .append("interIndustryRegionRate", getInterIndustryRegionRate())
            .append("interIndustryCompanyRate", getInterIndustryCompanyRate())
            .append("adTotalRate", getAdTotalRate())
            .append("adMerchantRate", getAdMerchantRate())
            .append("adUserRate", getAdUserRate())
            .append("adSalesmanRate", getAdSalesmanRate())
            .append("adRegionRate", getAdRegionRate())
            .append("adCompanyRate", getAdCompanyRate())
            .append("storeType", getStoreType())
            .append("storeBonusRate", getStoreBonusRate())
            .append("minOrderAmount", getMinOrderAmount())
            .append("maxDailyLimit", getMaxDailyLimit())
            .append("adRewardMinDuration", getAdRewardMinDuration())
            .append("adRewardCompleteRequired", getAdRewardCompleteRequired())
            .append("adRewardDailyLimit", getAdRewardDailyLimit())
            .append("adRewardAmountPerView", getAdRewardAmountPerView())
            .append("userLockEnabled", getUserLockEnabled())
            .append("lockUserLimit", getLockUserLimit())
            .append("lockDurationDays", getLockDurationDays())
            .append("status", getStatus())
            .append("auditStatus", getAuditStatus())
            .append("auditReason", getAuditReason())
            .append("auditUserId", getAuditUserId())
            .append("auditTime", getAuditTime())
            .append("createTime", getCreateTime())
            .append("updateTime", getUpdateTime())
            .append("createBy", getCreateBy())
            .append("updateBy", getUpdateBy())
            .toString();
    }
}
